package com.origin.onlinesys.web.controllers.modules.login;

import com.alibaba.fastjson.JSONObject;
import com.origin.onlinesys.common.controllers.BaseController;
import com.origin.onlinesys.service.modules.interviewsys.impl.ZoneServiceImpl;
import com.origin.onlinesys.service.modules.user.impl.RolesServiceImpl;
import com.origin.onlinesys.web.utils.Constants;
import com.origin.onlinesys.web.utils.WebUtils;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * Created by Administrator on 2015/1/6.
 * 登录控制器
 */

@Controller
public class UserLoginController extends BaseController {
    @Autowired
    private RolesServiceImpl service;

    @Autowired
    private ZoneServiceImpl zoneService;

    private static final Logger log = Logger.getLogger(UserLoginController.class);

/*    @RequestMapping(value = "/logintest")
    @ResponseBody
    public List<String> loginTest(){
        System.out.println("==");
        List<String> list = new ArrayList<String>();
        list.add("ok");
        list.add("ok2");
        return list;
    }*/

    /**
     * 用户登录
     * @param username 用户名
     * @param password 密码
     * @param captcha 验证码，非必须
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/login/oauth")
    public JSONObject login(HttpServletRequest request,@RequestParam String username,@RequestParam String password,@RequestParam(required = false) String captcha){
        final Subject subject = SecurityUtils.getSubject();
        //登录成功
        final JSONObject jsonObject = new JSONObject();
        try {
            UsernamePasswordToken token = new UsernamePasswordToken(username,password);
//            token.setRememberMe(true);
            //登录
            subject.login(token);Map map=null;
            if(subject.isAuthenticated()){
                jsonObject.put(Constants.RET_STATUS,200);
                if("3".equals(WebUtils.getAccount().getJobstate())||
                 "2".equals(WebUtils.getAccount().getState())) {
                    jsonObject.put(Constants.RET_DATA, false);
                    jsonObject.put(Constants.RET_MSG, "你 已 离 职 不 能 登 录，如 要 进 行 此 操 作 请 联 系 管 理 员");
                    return jsonObject;
                }map = service.selectRoleIdByUserId(WebUtils.getUserId());
                if(map == null || map.size() == 0){
                    jsonObject.put(Constants.RET_DATA,false);
                    jsonObject.put(Constants.RET_MSG, "系 统 检 测 不 到 你 的 角 色，如 要 进 行 此 操 作 请 联 系 管 理 员");
                    return jsonObject;
                }
                String roleId = map.get("id").toString();WebUtils.getAccount().setRoleId(roleId);
                WebUtils.getAccount().setRoleName(map.get("rolename").toString());
                WebUtils.getAccount().setQueryZoneId(WebUtils.getAccount().getCompanyareaid());
                WebUtils.getAccount().setZoneList(zoneService.selectByState("1"));
                jsonObject.put(Constants.RET_DATA,true);
                return jsonObject;
            }
        }catch (AuthenticationException e){
            log.debug(e);
        }
        jsonObject.put(Constants.RET_STATUS,200);
        jsonObject.put(Constants.RET_DATA,false);
        jsonObject.put(Constants.RET_MSG,"用 户 名 或 密 码 错 误");
        return jsonObject;
    }

    /**
     * 退出
     * @return
     */
    @RequestMapping("/logoutui")
    public String uiLogout(){
        //SecurityUtils.getSubject().logout();
        return "forward:/login/loginui";
    }

    /**
     * 登录界面
     * @return
     */
    @RequestMapping(value = "/login/loginui")
    public String uiLogin(){
        /*AllSuccessfulStrategy
        AuthorizationAttributeSourceAdvisor
        DefaultAdvisorAutoProxyCreator
        DefaultFilterChainManager*/
        // return "forward:/hello" => 转发到能够匹配 /hello 的 controller 上
        // return "hello" => 实际上还是转发，只不过是框架会找到该逻辑视图名对应的 View 并渲染
        // return "/hello" => 同 return "hello"
        // 重定向到 /hello 资源
        //return "redirect:/hello";
        return "manger/oauth/signin";
    }


}
